from enum import Enum

class UserPermission(Enum):
    STUDENT_VIEW = 1
    TEACHER_EDIT_OWN_COURSE = 2
    ADMIN_MANAGE_USERS = 3

# ==============================
# 1. 系统基础配置(全局通用参数)
# ==============================
# 系统名称(匹配项目主题"GT - OOP Management"的LMS定位)
SYSTEM_NAME = "GT-OOP Learning Management System (LMS)"
# 系统版本(标识项目迭代,便于交付文档追溯)
SYSTEM_VERSION = "1.0.0"
# 项目交付相关时间配置(匹配文档"Calendar"中时间节点要求)
PROJECT_START_WEEK = 4  # 项目启动周(文档1-14:第4周发布题目)
PROJECT_DEADLINE_WEEK = 8  # 项目截止周(文档1-12/15:第8周完成演示)
PRESENTATION_DURATION = 10  # 演示时长限制(分钟,文档1-49:10分钟演示)


# ==============================
# 2. 用户管理模块配置(适配OOP封装与安全要求)
# ==============================
# 密码加密配置(符合文档"封装敏感数据"技术要求,文档1-33)
PASSWORD_SALT = "GT_OOP_LMS_2024_SALT_!@#"  # 密码加密盐值(增强安全性,避免明文存储)
PASSWORD_HASH_ALGORITHM = "CAESAR"  # 加密算法(改为凯撒加密)
# 用户角色定义(匹配User类子类划分,文档1-26:Student/Teacher/Administrator)
USER_ROLES = {
    "STUDENT": "student",
    "TEACHER": "teacher",
    "ADMINISTRATOR": "administrator"
}
# 用户输入格式约束(与utils.py中input_validation联动,文档1-39:输入验证)
USERNAME_MIN_LENGTH = 3
USERNAME_MAX_LENGTH = 15
PASSWORD_MIN_LENGTH = 6
PASSWORD_MAX_LENGTH = 20
EMAIL_ALLOWED_DOMAINS = ["@gmail.com", "@school.edu", "@gt.edu"]  # 允许的邮箱域名(限制非法邮箱注册)


# ==============================
# 3. 课程与选课模块配置(匹配核心功能约束)
# ==============================
# 课程管理规则(文档1-27:课程创建/修改/删除权限,文档1-28:选课系统约束)
COURSE_NAME_MIN_LENGTH = 2
COURSE_NAME_MAX_LENGTH = 50
COURSE_DESCRIPTION_MAX_LENGTH = 500  # 课程描述最大长度(避免内容过长)
# 选课限制(文档1-28:学生选课与教师管理班级约束)
MAX_COURSES_PER_STUDENT = 5  # 学生最大选课数(避免选课过多导致管理混乱)
MAX_STUDENTS_PER_COURSE = 30  # 单课程最大容量(平衡教学质量与系统性能)
COURSE_CREATION_ROLES = [USER_ROLES["TEACHER"], USER_ROLES["ADMINISTRATOR"]]  # 允许创建课程的角色(文档1-27)


# ==============================
# 4. 作业与评分模块配置(支撑评分系统实现)
# ==============================
# 作业管理规则(文档1-29:作业创建与提交约束)
ASSIGNMENT_TITLE_MIN_LENGTH = 2
ASSIGNMENT_TITLE_MAX_LENGTH = 100
ASSIGNMENT_CONTENT_MAX_LENGTH = 1000  # 作业内容最大长度
# 评分系统配置(文档1-29:实现评分系统,文档1-30:进度追踪数据基础)
GRADE_SCALE = {  # 成绩等级对应关系(便于学生进度追踪与成绩展示)
    "A": (90, 100),
    "B": (80, 89),
    "C": (70, 79),
    "D": (60, 69),
    "F": (0, 59)
}
GRADE_PRECISION = 1  # 成绩保留小数位数(如85.5分)
ASSIGNMENT_SUBMISSION_EXTENSIONS = [".txt", ".pdf", ".docx"]  # 允许的作业提交文件格式(文档1-29)


# ==============================
# 5. 数据持久化与CLI配置(匹配技术要求与交互设计)
# ==============================
# 数据存储配置(文档1-42:可选数据持久化功能,支撑数据保存)
import os
# 获取项目根目录
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DATA_STORAGE_DIR = PROJECT_ROOT# 保持使用项目根目录
DATA_MAIN_FILE = "data.json"  # 主数据文件
DATA_FILE_EXTENSION = ".json"  # 数据文件格式
# 命令行界面(CLI)配置(文档1-40:实现简单CLI交互)
CLI_PROMPT = "[GT-OOP LMS] >>> "  # CLI交互提示符
CLI_MENU_WIDTH = 50  # 菜单显示宽度(优化交互体验)
CLI_ERROR_COLOR = "\033[91m"  # 错误提示颜色(终端显示优化)
CLI_SUCCESS_COLOR = "\033[92m"  # 成功提示颜色
CLI_RESET_COLOR = "\033[0m"  # 终端颜色重置

def ensure_storage_dir():
    """创建数据存储目录(若不存在),避免文件写入时路径错误"""
    if not os.path.exists(DATA_STORAGE_DIR):
        os.makedirs(DATA_STORAGE_DIR)
        print(f"已创建数据存储目录:{DATA_STORAGE_DIR}")


# ==============================
# 6. 交付文档配置(匹配文档"Deliverables"要求)
# ==============================
# 必需交付文件列表(文档1-22:提交所有必需文档,文档1-46至1-49)
REQUIRED_DELIVERABLES = [
    "source_code_documentation.md",  # 源代码文档
    "UML_class_diagram.png",         # UML类图
    "project_report.md",             # 项目报告
    "presentation_slides.pdf"        # 演示PPT
]
# 文档格式约束(确保交付文档合规)
REPORT_MAX_PAGE_COUNT = 10  # 项目报告最大页数(避免内容冗余)
UML_DIAGRAM_FORMATS = ["PNG", "JPG", "PDF"]  # 允许的UML图格式